StringGrid - text sirsi nez sirka bunky
Otázka od: Jiri Novotny
16. 10. 2002 10:46
Ahoj!
Mam na formulari StringGrid se 3 sloupci, ktery vypada priblizne
takto:
Souradnice bodu
2 5 7
3 1 4
5 1 1
Souradnice bodu
1 1 2
2 3 3
....
Vykresluji si to pomoci udalosti OnDrawCell, ale nemohu prijit na to,
jak spravne vypsat ty radky s textem "souradnice bodu". Delam to
(napr. pro 1. radek) tak, ze
StringGrid.Cells[0,0] := 'Souradnice bodu';
a dale mam (zjednodusene)
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
with StringGrid1.Canvas do begin
case ARow of
0, 4 : begin
Font.Name := 'Arial';
Font.Color := clLime;
Brush.Color := clNavy;
end;
else begin
Font.Name := 'Courier New';
Font.Color := clBlack;
Brush.Color := clWhite;
end;
end;
FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top,StringGrid1.Cells[ACol,ARow]);
end;
end;
Toto mi funguje bez problemu pro ty cisla, ale napis "souradnice
bodu" se mi
oreze jen na sirku bunky v prvnim sloupecku.
Predpokladam, ze je to tim, ze udalost OnDrawCell mi vykresli v
kazdem radku napred 1. sloupecek (to se text vypise OK), jenze pak
se vykresli 2. sloupec a dojde k premazani presahujiciho textu.
Nevite jak to obejit, aby se ten text nemazal?
Jirka.
Odpovedá: Peter Surovy
16. 10. 2002 11:47
Ahoj
----- Original Message -----
From: "Jiri Novotny" <novotny@ftknw.upol.cz>
Sent: Wednesday, October 16, 2002 10:25 AM
-- pokial moje skromne vedomosti siahaju - tak sa to neda
to by musela byt nejaka nowrap moznost a to nie je
-- myslim ze to robis dost od veci
stringgrid je od slovicka grid t.j. mriezka
a Ty tam mriezku nedodrzujes lebo do nej vkladas cele riadky ;
mozno by si mal namiesto tych
"Suradnice bodu " dat len nejaky Edit a potom vlozit maly grid
s hodnotami pocas runtime.
a tak... ved nemusis vsetko davat do jedneho StringGridu ako by to
bol Excel-ovsky zosit. Teda aspon ja by som to takto robil..
Peter Surovy
> Mam na formulari StringGrid se 3 sloupci, ktery vypada priblizne
> takto:
>
> Souradnice bodu
> 2 5 7
> 3 1 4
> 5 1 1
> Souradnice bodu
> 1 1 2
> 2 3 3
> ....
>
> Vykresluji si to pomoci udalosti OnDrawCell, ale nemohu prijit na to,
> jak spravne vypsat ty radky s textem "souradnice bodu". Delam to
> (napr. pro 1. radek) tak, ze
> StringGrid.Cells[0,0] := 'Souradnice bodu';
>
> a dale mam (zjednodusene)
>
Odpovedá: Petr Fejfar
16. 10. 2002 12:43
From: "Jiri Novotny" <novotny@ftknw.upol.cz>
> Toto mi funguje bez problemu pro ty cisla, ale napis "souradnice
> bodu" se
mi oreze jen na sirku bunky v prvnim sloupecku.
> Predpokladam, ze je to tim, ze udalost OnDrawCell mi vykresli v
> kazdem radku napred 1. sloupecek (to se text vypise OK), jenze pak
> se vykresli 2. sloupec a dojde k premazani presahujiciho textu.
Musis potlacit kresleni tech bunek prepsanych tim textem:
1. Musis vypnout DefaultDrawing, aby ti to nemazalo pozadi
2. Musis zvetsit sirku policka, do ktereho pises text
3. Musis preskakat zakryta policka
V Tvem prikladu principielne takto:
case ARow of
0, 4: if aCol=0 then
begin
Font.Name := 'Arial';
Font.Color := clLime;
Brush.Color := clNavy;
WideRect := classes.Rect(Rect.Left,Rect.Top,(Sender as
tControl).Width,Rect.Bottom);
FillRect(WideRect);
TextOut
(WideRect.Left+2,WideRect.Top,StringGrid1.Cells[ACol,ARow]);
end
else
;
else begin
Font.Name := 'Courier New';
Font.Color := clBlack;
Brush.Color := clWhite;
FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top,StringGrid1.Cells[ACol,ARow]);
end;
end;
HTH, pf
Odpovedá: Peter Vlkovic
16. 10. 2002 14:07
Ahoj,
Nizsie ti posielam ukazku, ako mozno riesit prekreslovanie
v StringGride s niektorymi bunkami presahujucimi viacere stlpce
(pozor nesmies zabudnut nastavit DefaultDrawing na False).
Ak chces, mozem ti pripadne poslat zlozitejsiu verziu ukazky.
Vlkovic
// inicializacia
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
StringGrid1.RowCount := 10;
for i := 0 to StringGrid1.RowCount - 1 do
begin
StringGrid1.Cells[0,i] := IntToStr ( 100 + i );
StringGrid1.Cells[1,i] := IntToStr ( 200 + i );
StringGrid1.Cells[2,i] := IntToStr ( 300 + i );
end;
end;
// obsluha prekreslovania
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
var
SG: TStringGrid;
ACell: string;
AddWidth: integer;
begin
SG := Sender as TStringGrid;
if ( Row = 0 ) or ( Row = 5 ) then // na tychto riadkoch bude nadpis
begin
if Col = 0 then // obsluhuje sa prekreslovanie len prveho stlpca
begin
AddWidth := SG.ColWidths[1] + SG.ColWidths[2]; // sirka 2. a 3.
stlpca
Rect.Right := Rect.Right + AddWidth;
SG.Canvas.FillRect ( Rect );
SG.Canvas.TextRect ( Rect, Rect.Left, Rect.Top, 'Text cez tri
bunky'
);
end;
end
else
begin // obsluha prekreslovania ostatnych buniek
ACell := SG.Cells[Col,Row]; // obsah bunky
SG.Canvas.TextOut ( Rect.Left, Rect.Top, ACell );
end;
end;
> Mam na formulari StringGrid se 3 sloupci, ktery vypada priblizne
> takto:
>
> Souradnice bodu
> 2 5 7
> 3 1 4
> 5 1 1
> Souradnice bodu
> 1 1 2
> 2 3 3
> ....
>
> nemohu prijit na to, jak spravne vypsat ty radky s textem
> "souradnice bodu".
>
> Jirka.